From 2e5616b27ea72947d9b61cf2be6d61d65a2d1df7 Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Mon, 14 Dec 2015 19:40:25 +0100 Subject: [PATCH] Win32: move CoInitialize to dnd init Functions requiring CoInitialize are called just in two places: - the filechooser thread which calls its own CoInitializeEx - the dnd code Moving CoInitialize in the dnd specific init is cleaner and we can pair it with the corresponding CoUninitialize since CoUninitialize should be called as many times as CoInitialize. Note that it is ok to call this function multiple times, so it will not break if another codepath will need it in the future. The patch also replaces the deprecated CoInitialize with the equivalent call to CoInitializeEx (already used in the filechooser). --- gdk/win32/gdkdnd-win32.c | 4 ++++ gdk/win32/gdkmain-win32.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/gdk/win32/gdkdnd-win32.c b/gdk/win32/gdkdnd-win32.c index e1d5d104c1..376ea0f654 100644 --- a/gdk/win32/gdkdnd-win32.c +++ b/gdk/win32/gdkdnd-win32.c @@ -1571,6 +1571,8 @@ add_format (GArray *fmts, void _gdk_dnd_init (void) { + CoInitializeEx (NULL, COINIT_APARTMENTTHREADED); + if (getenv ("GDK_WIN32_USE_EXPERIMENTAL_OLE2_DND")) use_ole2_dnd = TRUE; @@ -1617,6 +1619,8 @@ _gdk_win32_dnd_exit (void) { OleUninitialize (); } + + CoUninitialize (); } /* Source side */ diff --git a/gdk/win32/gdkmain-win32.c b/gdk/win32/gdkmain-win32.c index 64d5654bf3..c66b540909 100644 --- a/gdk/win32/gdkmain-win32.c +++ b/gdk/win32/gdkmain-win32.c @@ -97,8 +97,6 @@ _gdk_win32_windowing_init (void) GDK_NOTE (EVENTS, g_print ("input_locale:%p, codepage:%d\n", _gdk_input_locale, _gdk_input_codepage)); - CoInitialize (NULL); - _gdk_selection = gdk_atom_intern_static_string ("GDK_SELECTION"); _wm_transient_for = gdk_atom_intern_static_string ("WM_TRANSIENT_FOR"); _targets = gdk_atom_intern_static_string ("TARGETS"); -- 2.30.2